{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Финальный проект: задачи по исследованию мобильного приложения. Вариант №1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from datetime import datetime\n",
    "import numpy as np\n",
    "import scipy.stats as ss\n",
    "from scipy.stats import normaltest\n",
    "from scipy.stats import chi2_contingency\n",
    "import pingouin as pg\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Оглавление\n",
    "\n",
    "- [Задание № 1. Функция Retention](#Задание-1)\n",
    "- [Задание № 2. AB-test](#Задание-2)\n",
    "- [Задание № 3. Рекомендации по метрикам](#Задание-3)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Для начала подгрузим данные из трёх имеющихся таблиц и посмотрим на то, как их интерпретировать:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Файл **problem1-reg_data.csv** - содержит в себе данные о времени регистрации пользователей. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>reg_ts</th>\n",
       "      <th>uid</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1998-11-18 09:43:43</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1999-07-22 22:38:09</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2000-01-13 22:27:27</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2000-05-28 14:19:01</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2000-09-16 11:21:53</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               reg_ts  uid\n",
       "0 1998-11-18 09:43:43    1\n",
       "1 1999-07-22 22:38:09    2\n",
       "2 2000-01-13 22:27:27    3\n",
       "3 2000-05-28 14:19:01    4\n",
       "4 2000-09-16 11:21:53    5"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_data = pd.read_csv('/mnt/HC_Volume_18315164/home-jupyter/jupyter-a-kuksova/shared/problem1-reg_data.csv', sep=';')\n",
    "reg_data['reg_ts'] = pd.to_datetime(reg_data['reg_ts'], unit='s') # меняем формат даты\n",
    "reg_data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**reg_ts** — данные о времени регистрации пользователей.\n",
    "\n",
    "**uid** — идентификационный номер пользователя."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Размер датафрейма:\n",
      "(1000000, 2)\n",
      "Типы данных:\n",
      "reg_ts    datetime64[ns]\n",
      "uid                int64\n",
      "dtype: object\n",
      "Отсутствуют ли значения:\n",
      "reg_ts  uid  \n",
      "False   False    1000000\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(f'''Размер датафрейма:\n",
    "{reg_data.shape}\n",
    "Типы данных:\n",
    "{reg_data.dtypes}\n",
    "Отсутствуют ли значения:\n",
    "{reg_data.isna().value_counts()}''')\n",
    "# смотрим размерность датафрейма, знакомимся с типами данных,проверяем, где отсутствуют значения / NaN - отсутствуют"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Файл **problem1-auth_data.csv.csv** — содержит данные о времени входа пользователей в игру."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>auth_ts</th>\n",
       "      <th>uid</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1998-11-18 09:43:43</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1999-07-22 22:38:09</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1999-07-25 16:46:46</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1999-07-31 03:50:15</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1999-08-05 17:49:39</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              auth_ts  uid\n",
       "0 1998-11-18 09:43:43    1\n",
       "1 1999-07-22 22:38:09    2\n",
       "2 1999-07-25 16:46:46    2\n",
       "3 1999-07-31 03:50:15    2\n",
       "4 1999-08-05 17:49:39    2"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "auth_data = pd.read_csv('/mnt/HC_Volume_18315164/home-jupyter/jupyter-a-kuksova/shared/problem1-auth_data.csv', sep=';')\n",
    "auth_data['auth_ts'] = pd.to_datetime(auth_data['auth_ts'], unit='s') # меняем формат даты\n",
    "auth_data.head() "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**auth_ts** — данные о времени входа пользователей в игру.\n",
    "\n",
    "**uid** — идентификационный номер пользователя."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Размер датафрейма:\n",
      "(9601013, 2)\n",
      "Типы данных:\n",
      "auth_ts    datetime64[ns]\n",
      "uid                 int64\n",
      "dtype: object\n",
      "Отсутствуют ли значения:\n",
      "auth_ts  uid  \n",
      "False    False    9601013\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(f'''Размер датафрейма:\n",
    "{auth_data.shape}\n",
    "Типы данных:\n",
    "{auth_data.dtypes}\n",
    "Отсутствуют ли значения:\n",
    "{auth_data.isna().value_counts()}''')\n",
    "# смотрим размерность датафрейма, знакомимся с типами данных,проверяем, где отсутствуют значения / NaN - отсутствуют"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Файл **ab_test_data.csv** - содержит в себе данные результата A/B теста, в котором двум группам пользователей предлагались различные наборы акционных предложений."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>revenue</th>\n",
       "      <th>testgroup</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id  revenue testgroup\n",
       "0        1        0         b\n",
       "1        2        0         a\n",
       "2        3        0         a\n",
       "3        4        0         b\n",
       "4        5        0         b"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ab_test_data = pd.read_csv('ab_test_data.csv', sep=';')\n",
    "ab_test_data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**user_id** — идентификационный номер пользователя.\n",
    "\n",
    "**revenue** — выручка, полученная от пользователя с определенным id.\n",
    "\n",
    "**testgroup** — принадлежность пользователя к контрольной или тестовой группе (a/b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Размер датафрейма:\n",
      "(404770, 3)\n",
      "Типы данных:\n",
      "user_id       int64\n",
      "revenue       int64\n",
      "testgroup    object\n",
      "dtype: object\n",
      "Отсутствуют ли значения:\n",
      "user_id  revenue  testgroup\n",
      "False    False    False        404770\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(f'''Размер датафрейма:\n",
    "{ab_test_data.shape}\n",
    "Типы данных:\n",
    "{ab_test_data.dtypes}\n",
    "Отсутствуют ли значения:\n",
    "{ab_test_data.isna().value_counts()}''')\n",
    "# смотрим размерность датафрейма, знакомимся с типами данных,проверяем, где отсутствуют значения / NaN - отсутствуют"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Данные проверены, проинтерпретированы."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "По результатам рассмотрения данных отмечаю, что в каждой из таблиц находятся одинаковые колонки, которые привязывают конкретное действие (регистрация/входы/доход/группа) к пользователю. Также замечаем, что в таблице с аутенфикацией пользователей строк гораздо больше, чем в дф с данными о регистрации, что логично. Пользователи регистрируются один раз, а входят в игру некоторое количество раз.\n",
    "\n",
    "Так как мы работаем с временными промежутками и иных данных кроме id нет, было бы здорово посмотреть отправную и завершающую дату в датафреймах reg_data и auth_data, чтобы понимать, какой рассматриваем период."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Первая зафиксированная дата/время регистрации: 1998-11-18 09:43:43\n",
      "Первая зафиксированная дата/время входа: 1998-11-18 09:43:43\n"
     ]
    }
   ],
   "source": [
    "reg_min = reg_data.reg_ts.min() # узнаем дату начала для дф reg_data\n",
    "print(f'Первая зафиксированная дата/время регистрации: {reg_min}')\n",
    "auth_min = auth_data.auth_ts.min() # узнаем дату начала для дф auth_data\n",
    "print(f'Первая зафиксированная дата/время входа: {reg_min}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Последняя зафиксированная дата/время регистрации: 2020-09-23 15:17:24\n",
      "Последняя зафиксированная дата/время входа: 2020-09-23 15:17:24\n"
     ]
    }
   ],
   "source": [
    "reg_max = reg_data.reg_ts.max()\n",
    "print(f'Последняя зафиксированная дата/время регистрации: {reg_max}')\n",
    "auth_max = auth_data.auth_ts.max()\n",
    "print(f'Последняя зафиксированная дата/время входа: {reg_max}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Даты совпадают в обоих дф, имеющийся промежуток в данных - более 21 года.\n",
    "\n",
    "Считаю обработку и интерпретацию данных завершенной, перехожу к заданиям."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 1\n",
    "**Retention** – один из самых важных показателей в компании. Задача – написать функцию, которая будет считать retention игроков (по дням от даты регистрации игрока)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Данные предоставлены за довольно большой промежуток времени, поэтому считаю, что стоит рассматривать показатель Retention по более свежим и актуальным данным.\n",
    "В задании указано, что в ходе решения можно тестировать работу функции как на полном датасете, так и на части (сэмпле) данных.\n",
    "\n",
    "Для рассмотрения возьмем опитмальный временной промежуток - пять последних лет (с 2015 по конечную дату - 2020 год). Отфильтруем датафреймы и напишем функцию расчета:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "reg_5y = reg_data.query('reg_ts >= \"2015-01-01\"')\n",
    "auth_5y = auth_data.query('auth_ts >= \"2015-01-01\"') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def retention_func(reg_data, auth_data):\n",
    "    '''\n",
    "    Данная функция возвращает обработанный датафрейм с расчетом retention rate, под названием ret_rate для двух наборов данных:\n",
    "    - в качестве первого аругмента функция принимает датафрейм с датой регистрации пользователей и uid пользователя.\n",
    "    - в качестве второго аругмента функция принимает датафрейм с датами авторизации пользователей и uid пользователя.\n",
    "    '''\n",
    "    reg_auth = auth_data.merge(reg_data, on = 'uid') # объединим датафреймы с датой регистрации и датой входа по uid\n",
    "    reg_auth['days_after_reg'] = (reg_auth['auth_ts'] - reg_auth['reg_ts']).dt.days # посчитаем кол-во дней прошедших от рег до входа\n",
    "    ret_rate = reg_auth.groupby('days_after_reg')\\\n",
    "                        .agg({'uid': 'nunique'})\\\n",
    "                        .reset_index()\\\n",
    "                        .rename(columns = {'uid': 'users_count'}) #группируем по дням и агрегируем для уникальных пользователей \n",
    "    ret_rate['retention_rate'] = (ret_rate.users_count / reg_auth.uid.nunique() * 100).round(2) # находим retention в %\n",
    "    ret_rate = ret_rate.drop(labels = [0],axis = 0) # убираем первый день, где retention 100%\n",
    "    return ret_rate # возвращаем retention rate"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Проверяем документацию для функции:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on function retention_func in module __main__:\n",
      "\n",
      "retention_func(reg_data, auth_data)\n",
      "    Данная функция возвращает обработанный датафрейм с расчетом retention rate, под названием ret_rate для двух наборов данных:\n",
      "    - в качестве первого аругмента функция принимает датафрейм с датой регистрации пользователей и uid пользователя.\n",
      "    - в качестве второго аругмента функция принимает датафрейм с датами авторизации пользователей и uid пользователя.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(retention_func)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Проверяем работу функции на наборе данных за 5 последних лет:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "retention_rate5y = retention_func(reg_5y, auth_5y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>days_after_reg</th>\n",
       "      <th>users_count</th>\n",
       "      <th>retention_rate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>38878</td>\n",
       "      <td>4.02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>41622</td>\n",
       "      <td>4.30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>47581</td>\n",
       "      <td>4.92</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>54275</td>\n",
       "      <td>5.61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>61621</td>\n",
       "      <td>6.37</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   days_after_reg  users_count  retention_rate\n",
       "1               1        38878            4.02\n",
       "2               2        41622            4.30\n",
       "3               3        47581            4.92\n",
       "4               4        54275            5.61\n",
       "5               5        61621            6.37"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "retention_rate5y.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "В задании нас не просят о том, чтобы проанализировать полученные данные, но я вернулась обратно к функции и добавила в нее в возможность построения графика retention, потому что для данного показателя это было бы очень удобно :)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "def retention_func_with_plot(reg_data, auth_data):\n",
    "    '''\n",
    "    Данная функция возвращает обработанный датафрейм с расчетом retention rate, под названием ret_rate для двух наборов данных:\n",
    "    - в качестве первого аругмента функция принимает датафрейм с датой регистрации пользователей и uid пользователя.\n",
    "    - в качестве второго аругмента функция принимает датафрейм с датами авторизации пользователей и uid пользователя.\n",
    "    Также, в результате исполнения отрисовывает лайнплот retention rate.\n",
    "    *Для просмотра финального датафрейма требуется вызвать переменную, в которую записывается датафрейм. \n",
    "    '''\n",
    "    reg_auth = auth_data.merge(reg_data, on = 'uid') # объединим датафреймы по колонке с датой регистрации и датой входа\n",
    "    reg_auth['days_after_reg'] = (reg_auth['auth_ts'] - reg_auth['reg_ts']).dt.days # посчитаем кол-во дней прошедших от рег до входа\n",
    "    ret_rate = reg_auth.groupby('days_after_reg')\\\n",
    "                        .agg({'uid': 'nunique'})\\\n",
    "                        .rename(columns = {'uid': 'users_count'})\\\n",
    "                        .reset_index() #группируем по дням и агрегируем для уникальных пользователей \n",
    "    ret_rate['retention_rate'] = (ret_rate.users_count / reg_auth.uid.nunique() * 100).round(2) # находим retention в %\n",
    "    ret_rate = ret_rate.drop(labels = [0],axis = 0) # убираем первый день, где retention 100%\n",
    "    \n",
    "    plt.figure(figsize=(15, 7)) # построение графика универсального для любого набора данных\n",
    "    sns.set_style(\"whitegrid\")\n",
    "    retention_plot = sns.lineplot(x='days_after_reg', y='retention_rate', data=ret_rate.query('days_after_reg <= 60')) # ret_rate можно отфильтровать для вывода retention по любому количеству дней\n",
    "    plt.title('Удержание пользователя (в днях)')\n",
    "    plt.xlabel('Количество дней с момента регистрации')\n",
    "    plt.ylabel('% удержания пользователей')\n",
    "    return ret_rate, retention_plot # возвращаем retention rate, возвращаем retention plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Qtu2bZPdbld2drZjDVaxzz77TMePH1d6erreeustDRgwQJKUkpKiV199VTNmzJDJZFLbtm3VrFkzValSRX/961+1ePFi7dmzR1LRyEVAQICCgoKUlJSkd99997I/5+uvv67HHntMBoOhxPXBgwdr1apV+umnn1RYWKjc3Fxt2LBBx48fv+w2evfurYMHD2rJkiUqKCjQ0qVLtXfvXl177bUqKCjQ559/rqysrPNGNUtTtWpVGY1G2e12ZWVlKSEhQVLR9MCCggL5+/tLkgYOHKiPPvpICQkJysrK0n/+8x/FxMQ4plWey2QyKSMjQ/n5+crKypLJZJLValVBQYFmz5590U0+zjVq1Ci98847+v333yVJGRkZWrZsmSQpMzNTb7zxhrp37+4YMf2zZ599Vnfffbfq1Klz0XbMZrO6du2qjRs3lvq80WiUwWC44HpEZ/3XmYKCAk2fPl3Tpk1TUFBQiedyc3P12GOP6S9/+YtmzZql5ORkffrppyXaPnXqlK655porahsAKiKmSgKACw0cOFAFBQV6+umnz1tPdN111yk/P1/33nuv49qZM2c0ceJEbd++Xa1bt9Zzzz2nGTNm6NChQ/L391f79u1LBJOBAwdq/PjxSk5O1nXXXaf7779fkjRr1izdcsstatSo0Xk1Wa1WPfroo3rmmWf0+eef68EHH9Tjjz+u6Oho1a1bV0OGDNGHH354WZ+zZcuWpU5/rFWrlubMmaMXX3xRU6ZMkdFoVJs2bfTss89e1v2loil/b731lp5//nk9++yzqlevnt566y1ZrVZ98cUXWrhwoebMmeMIXaUZM2aMjEajTCaTJkyYoMaNGyspKUkPPPCAEhMTZTabFR0drSeeeEKSNGLECCUlJen2229Xbm6uevTooaeeeqrEPTt27Oiob8aMGQoKClKPHj3Us2dP3XjjjQoICNBdd91VYlrrxfTr109ZWVl69NFHdeTIEQUFBalbt26KiYnRzJkzderUqVJHoKSiUcOTJ0/qrrvuuqS2Ro0apU8++USDBg1yXFu2bJlWrFgho9GoZs2a6bnnniv1vc76rzPvvvuuIiIidOONN5733L///W+Fh4frtttukyS9+OKLuvPOO9W9e3fVr19fS5Ys0dChQ2U2my/pcwKANzDYL2XeBgCgzPXt21crV6487/rYsWMvKTj17dtXM2fOVLdu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7t0bgEGDBumaUMkdP36ctWvXMmTIEACsVqt6QHQtqEJycnLYunWr7e8As9mMj49PheuBKhHcMjMzCQkJsb0ODg4mMzPTgRWJI508eZKgoCAAAgMDOXnypIMrkvKQkZFBSkoKsbGx6oEqxmKxkJCQQIcOHejQoQPh4eH4+Pjg4uICQEhIiK4Jldzzzz/Po48+itFY+rXn9OnT6oEqaNSoUQwePJgFCxYA+j5QlWRkZODv78/kyZMZOHAgU6ZMIS8vr8L1QJUIbiJlMRgMGAwGR5chdpabm8vYsWN57LHH8PLyuuRn6oHKz2QykZiYyLp169i5cycHDhxwdElSjtasWYO/vz9NmjRxdCniQPPnz+eLL77gnXfe4eOPP2br1q2X/FzXgsqtuLiY3bt3M2zYMBYvXky1atUumxZZEXqgSgS34OBgjh8/bnudmZlJcHCwAysSRwoICCArKwuArKws/P39HVyR2FNRURFjx44lPj6eXr16AeqBqsrHx4d27dqRnJzMuXPnKC4uBkqn0emaUHnt2LGD1atXExcXx/jx49myZQvPPfeceqCK+fXPNyAggJ49e7Jz505dC6qQkJAQQkJCiI2NBaBPnz7s3r27wvVAlQhuTZs2JS0tjcOHD1NYWMiyZcuIi4tzdFniIHFxcSxevBiAxYsX0717dwdXJPZitVqZMmUKkZGRjBw50rZdPVB1nDp1inPnzgGQn5/Ppk2biIqKol27dqxYsQKAL774QteESmzChAmsX7+e1atXM2PGDG644QZefvll9UAVkpeXx/nz522/3rhxI9HR0boWVCGBgYGEhITYZlxs3ryZqKioCtcDBqvVanV0EeVh3bp1PP/881gsFm6++WZGjx7t6JKkHIwfP54ffviB06dPExAQwJgxY+jRowcPP/wwx44dIzQ0lFdffRU/Pz9Hlyp2sG3bNm6//Xbq169vu7dl/PjxNGvWTD1QRezZs4dJkyZhsViwWq306dOHhx56iMOHDzNu3DjOnj1LTEwM06dPx2w2O7pcsbPvv/+e9957j7feeks9UIUcPnyYBx98ECi957V///6MHj2a06dP61pQhaSkpDBlyhSKiooIDw/nhRdeoKSkpEL1QJUJbiIiIiIiIhVVlZgqKSIiIiIiUpEpuImIiIiIiDg5BTcREREREREnp+AmIiIiIiLi5BTcREREREREnJyCm4iIHbVo0cL266ysLHr27Mnq1asdWFHFlp2dzV133cXNN9/M+++/7+hyREREyo2WAxARsaMWLVqQlJTE+fPnueOOOxg+fDhDhw51dFkiIiJSwWjETUTEzoqKihgzZgxxcXGXhLalS5cSHx9P//79eemlly75TExMDAkJCfTs2ZP77rsPgEmTJvH1118D8Nlnn9GgQQNOnTrF999/b3sPQFxcHKdOnQIgMTGRIUOGkJCQwJNPPonFYgFg/fr1DBo0iAEDBnDXXXeRn59PQkICCQkJNGnShPj4eBISEti1axeTJk0iLi6O/v37Ex8fz759+4DSxUyHDh1KfHw8Dz74IGfPnr3i+U+dOpWuXbuSkJBAixYt2LVrFwAjRoyw/RouHZ2cM2cON998M/Hx8bz22msAZGRk0L9/f9vvaffu3Zk6deplx8vNzWXy5MnEx8cTHx/PihUrLntPXFwc48aNs70eN24ccXFxABQUFNg+P3DgQLZs2QLAokWLaNCgAampqQCkpqbSoEEDFi1aBMBPP/3EHXfcweDBgxk1ahRZWVm/e54TJkwgISGBtm3bEhcXR0JCAvPnzycjI4Phw4czaNAgBg0axI4dOy6rPyMjgz59+jBhwgRuuukmxo4dy4ULF65aR+/evW1/zhkZGbz++uu8++67AGzatIkGDRrYav2jPfLkk08yePBgevfuzZo1a2x1Xulc/rdn3333XV5//XXb7/Ovf64HDhygUaNGtr7/bW8/8sgjtn4QEakKXBxdgIhIZffYY4+xdetWHn/8cdu2zMxMpk+fzqJFi/Dx8eGee+5h5cqV9OjRA4vFQrVq1UhMTOT777/nvffeu2R/BQUFzJ8/n4CAAACMRiNXmjyRmprKV199xfz583F1deXpp5/myy+/pHPnzjzxxBN89NFHhIeHc+bMGdzd3UlMTARKvxzPmzcPf39/274mTpxInz59mDp1Klu2bKF+/fpMnDiRJ554grZt2zJz5kzeeOMNpkyZclkdFouFhx9+mIEDBzJixIir/n599913HDp0iIULF2K1Whk9ejRbt26lZs2atvf85z//wcPD44qfnzVrFl5eXnz55ZcAZQbKEydOcPbsWaxWKydOnLBt//jjjwH48ssvSU1NZdSoUbbw16xZMz7//HMmTpzIwoULiY2NBUqD5LPPPsusWbPw9/dn+fLlvPLKK7zwwgtlnufLL78MlAbyrl270qdPHwAuXLjA3LlzcXNzIy0tjfHjx9vC4W8dPHiQ5557jlatWjF58mQ++eQT7rzzzt+tY/r06TRt2vSK9bz55pvUrl0bgFOnTv3hHjly5AgLFy4kPT2dO++8kw4dOhAQEHBN51KWmTNnEhUVddn2vXv38ssvv1zzfkREKgMFNxERO8rLy+PMmTO88MILTJ06lXnz5gGwa9cu2rZta/viGx8fz9atW+nRowf5+fm4ubmVuc+PP/6YQYMGMXfuXABCQkJITU2loKDgks9t3ryZn376iSFDhgCQn59PQEAAycnJtG7dmvDwcAD8/Pyueh7Tpk1jxowZFBYW8p///IecnBxycnJo27YtAIMGDeLvf/97mb8Hvr6+V/zZI488gru7u60+gI0bN7Jx40YGDhxo+3xaWpotuOXl5fH5558zfPjwK35537x5MzNmzLC9LuvY/fr1Y+nSpVitVvr378/bb78NwPbt27njjjsAiIqKIjQ0lIMHDwLQtGlTUlJSKCgoYM+ePTRp0gQoDVH79u1j5MiRAJSUlBAYGPi751mW4uJipk6dyp49ezAajaSlpV3xfTVr1qRVq1YADBgwgA8//JBOnTr9bh1lWbFiBU2bNuXnn38G+FM9ctNNN2E0GqlTpw7h4eEcOHCAsLCwazqXK9m1axdWq5XGjRtf9rNXX32VMWPG8Oqrr17z/kREKjoFNxEROzKbzcycORMPDw8WL17MkiVLGDBgwO9+Jisri6CgoCv+7Pz58yxbtoz58+fbglt4eDj9+/dn0KBBuLq62qbGWa1WBg0axIQJEy7Zx595OMqvI26fffYZr7/+OhMnTrzmz2ZkZBASEnLFn/12BOjXKYRWq5V7772X22677bL9AHzwwQfceuutuLq6/uHz+K24uDgee+wxrFYrL7zwgi24XU2nTp145pln6Ny5M4cPH7bVHB0dzYIFC674mSudZ1nef/99atSoQWJiIiUlJTRr1uyK7zMYDJe9vlodV2KxWHj33XeZPXt2meH7Wlypnms9lyuZOXMmkydP5p133rlke1JSEh4eHjRs2PBP1yoiUhHpHjcRETtycXGxTel78sknefXVV8nJyaFZs2Zs3bqVU6dOYbFYWLZsGW3atAHgq6++omXLllfc37x58xgxYgRms/mS7ePGjWP58uUkJibaQl/79u1ZsWIFJ0+eBODMmTMcOXKE5s2bs23bNlvoOHPmzDWfj6enJ6dPn8bb2xsfHx+2bdsGlN5L92v9v3XkyBFOnDjxh75kd+zYkc8//5zc3FygdFrpr+eQk5PDypUrufnmm8v8fIcOHWzTHaHsqZKurq7ExsbSvHnzS0Jg69atbdMsDx48yLFjx4iMjLT9PCEhgaSkpEsCeN26dTl16hRJSUlA6dTJPzuVLycnh8DAQIxGI4mJibb7Ev/X0aNHbcdbunQprVq1+lN1/Dp99rfTHv9Mj3z99deUlJSQnp7O4cOHqVu37jWfy//aunUrgYGBV5wm+cYbb/ylgCkiUlFpxE1EpJzUrl2bwYMHM2PGDJ566ikmTJjAXXfdhdVqpUuXLvTo0YMPPviAHTt28OKLL15xH1ar9aojdr+qV68eDz/8MPfccw8lJSW4urry5JNP0rx5c6ZOncqYMWMoKSmx3Yf0e6ZNm8a///1vDAYDzz77LAAvvvgiTz31FBcuXCA8PPyK93MNGTKEoqIi27TH9PR0pk2bxocffljmsTp27EhqaqptxM3Dw4OXXnoJo9HI8ePH+cc//oGLS9mXr9GjRzN16lT69++P0WjkoYceolevXld879ixYwFsD7wAGD58OE8//TTx8fGYTCZeeOGFS4JyQEAAy5Ytu2Q/ZrOZ1157jWeffZacnBwsFgt33XUX0dHRZdZZluHDhzNmzBgWL15Mp06dyryXr27dunz88cc89thj1KtXj2HDhv2pOrKzs21TK3/l7+//h3ukZs2aDBkyhNzcXP75z3/i5ub2u+eSlJTEsGHDgNJwXlJSQvfu3QFIS0vjrbfeuuJxmjVrRkREhG0EVkSkqtByACIiYjcjRoy4LKSNHTvW9qRI+XMyMjK4//77Wbp0qaNLAS5/wMqf8frrr9O2bVvatWt3HSsTEak8NOImIiJ288ADD1y27a677nJAJeLsbrjhBkJDQx1dhoiI09KIm4iIiIiIiJPTw0lEREREREScnIKbiIiIiIiIk1NwExERERERcXIKbiIiIiIiIk5OwU1ERERERMTJ/T+/RLuns3cHhgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1080x504 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "retention_rate, retention_plot = retention_func_with_plot(reg_5y, auth_5y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "По графику, можем сразу увидеть, что с 50 дня процент авторизующихся игроков резко уменьшается, и данная тенденция не меняется. Для подтверждения можем поменять в функции вывод графика за период 90-120 дней и увидим, что ничего не изменится. Просадка присутствует примерно на 7 день, далее немного возрастает и после десятого дня идет тенденция на снижение процента авторизовавшихся игроков."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>days_after_reg</th>\n",
       "      <th>users_count</th>\n",
       "      <th>retention_rate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>38878</td>\n",
       "      <td>4.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.0</td>\n",
       "      <td>41622</td>\n",
       "      <td>4.29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3.0</td>\n",
       "      <td>47581</td>\n",
       "      <td>4.91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4.0</td>\n",
       "      <td>54275</td>\n",
       "      <td>5.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5.0</td>\n",
       "      <td>61621</td>\n",
       "      <td>6.35</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   days_after_reg  users_count  retention_rate\n",
       "1             1.0        38878            4.01\n",
       "2             2.0        41622            4.29\n",
       "3             3.0        47581            4.91\n",
       "4             4.0        54275            5.60\n",
       "5             5.0        61621            6.35"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "retention_rate.head() # вывод итогового датафрейма с расчитанным retention"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Как вариант, функцию можно разбить на отдельные функции: для df и для графика."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 2\n",
    "Имеются результаты A/B теста, в котором двум группам пользователей предлагались различные наборы акционных предложений. Известно, что ARPU в тестовой группе выше на 5%, чем в контрольной. При этом в контрольной группе 1928 игроков из 202103 оказались платящими, а в тестовой – 1805 из 202667.\n",
    "\n",
    "Какой набор предложений можно считать лучшим? Какие метрики стоит проанализировать для принятия правильного решения и как?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Этап 1. Анализ исходных данных"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Таблицу для исследования мы подготовили выше, проверили размерность, проверили на отсутствующие значения и посмотрели на типы данных.\n",
    "Начать можно с фильтрования по группам исходного датафрейма:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>revenue</th>\n",
       "      <th>testgroup</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    user_id  revenue testgroup\n",
       "1         2        0         a\n",
       "2         3        0         a\n",
       "9        10        0         a\n",
       "10       11        0         a\n",
       "11       12        0         a"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "group_a = ab_test_data.query('testgroup == \"a\"')\n",
    "group_a.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>revenue</th>\n",
       "      <th>testgroup</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id  revenue testgroup\n",
       "0        1        0         b\n",
       "3        4        0         b\n",
       "4        5        0         b\n",
       "5        6        0         b\n",
       "6        7        0         b"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "group_b = ab_test_data.query('testgroup == \"b\"')\n",
    "group_b.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Также, проверяем, сколько уникальных пользователей присутствует по группам, совпадает ли число с условием задачи и какая группая является контрольной, а какая тестовой:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Контрольная группа: 202103\n",
      "Тестовая группа: 202667\n"
     ]
    }
   ],
   "source": [
    "print(f'Контрольная группа: {group_a.user_id.nunique()}') # совпадение - контрольная группа\n",
    "print(f'Тестовая группа: {group_b.user_id.nunique()}') # совпадение - тестовая группа"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Следующим действием посмотрим, присутствуют ли выбросы по выручке у групп:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f31eccc8cf8>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 5))\n",
    "sns.set_style(\"whitegrid\")\n",
    "sns.boxplot(x = 'testgroup', y = 'revenue', data = group_a) # контрольная группа"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f31ecc24e80>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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OHDgnI9vbm6W3+/vjNE63Weffaavvvoq3GPgPNm2He4RgG7Ltm3ePy9gn332WZf9f3t7LohQ+66io6OVkpIS7jEckZKSovz8/HCPAQAAOkh7AXpBfEbN7XYrEAgEb1uWJbfbHcaJAAAAnHdBhNrQoUNVW1ururo6tbS0qKysTF6vN9xjAQAAOOqCOPUZGRmpoqIizZo1S21tbZo+fbqSk5PDPRYAAICjLohQk6S0tDSlpaWFewwAAIBOc0Gc+gQAAOiOCDUAAABDEWoAAACGItQAAAAMRagBAAAYilADAAAwFKEGAABgqAvm76h9F135ouwAAKBraW5uPud9Ltu27U6cBQAAACHi1CcAAIChCDUAAABDEWoAAACGItQAAAAMRagBAAAYilADgG9x6NAhTZkyJdxjAOiGCDUAAABDEWoAEILW1lYtWLBAkyZNUkFBgb744otwjwSgGyDUACAEH3/8sW666SZt3bpVMTExevnll8M9EoBugFADgBBcdtll+ulPfypJuv7667Vv374wTwSgOyDUACAELper3dsA4ARCDQBC8Nlnn+lvf/ubJOm1114Lrq4BgJMINQAIwQ9/+EOtXbtWkyZNUlNTk2688cZwjwSgG3DZtm2HewgAAACcjRU1AAAAQxFqAAAAhiLUAAAADEWoAQAAGIpQAwAAMBShBqBLaWpq0tq1a89r3xdeeIFreAIwCqEGoEtpamrSK6+8cl77vvjii9851FpbW8/ruQAgFJHhHgAAOtITTzyhf//738rOzta4cePUp08fbd26VS0tLfL5fCooKNDnn3+uwsJCBQIBffXVV5ozZ47+85//qL6+XrfccosSEhL00ksvaf369Vq1apViY2N15ZVXKioqSkVFRVq0aJGioqLk9/s1cuRI5eTk6MEHH9QXX3yh//mf/9HSpUsVHx+vm2++Wffcc4+GDh2qI0eOKDc3Vzt37tSmTZu0fft2nThxQpZl6frrr9e8efPC/U8HwECEGoAuZcGCBfrXv/6lzZs3q6amRuXl5dqwYYNs29Ydd9yht99+W0eOHFFiYqKKi4slScePH1dsbKxeeOEFrVmzRr1795ZlWXr22We1adMmxcTE6JZbbtGVV14ZfB7LsvSnP/1JERERysrK0gMPPKDRo0fr6aef1sqVK3X//fe3O+d7772nLVu2qEePHsrNzVVaWpqGDh3q6L8NgAsPpz4BdFm7d+/W7t27lZOTo6lTp+qjjz5SbW2tBg8erD179ujxxx/XO++8o9jY2LP2fe+99zRq1CglJCTo4osv1sSJE8+4f+LEiYqIiNDx48d1/PhxjR49WpI0depUvfPOO98627hx49SrVy9dcskl8vl82rdvX8e8aABdCitqALos27Y1e/Zs/eIXvzjrvk2bNqmyslLLly/XVVdd9Z1PPfbo0eNbHxMREaGvr9LX0tJyxn0ul6vd2wAgsaIGoIuJiYnRyZMnJUnjx4/Xxo0bg7cty1JDQ4Msy1KPHj2UnZ2tmTNn6o7GBQEAAAFiSURBVO9///tZ+w4dOlRvv/22Ghsb1draqm3btn3j88XGxiouLi64irZ582aNGjVKktS/f3+9//77kqTXX3/9jP12796tY8eO6dSpU9qxY4dGjhzZwf8SALoCVtQAdCm9evXSyJEjNWXKFF199dWaMmVKcEXt0ksv1eOPP65PPvlEv/vd73TRRRcpMjJSixcvliTdcMMNmjVrlhITE/XSSy/ptttuU15enuLj4zVw4MBvPEUqSb/97W+DXyZISkrSo48+Kkm69dZbVVhYqHXr1iktLe2MfYYNG6Y777wz+GUCPp8G4Ju47K/X5QEAZzh58qRiYmLU2tqqefPmafr06fL5fN/7uJs2bdL777+voqKiDpgSQFfGihoAnMPKlSu1Z88eNTc3a/z48fr5z38e7pEAdDOsqAEAABiKLxMAAAAYilADAAAwFKEGAABgKEINAADAUIQaAACAoQg1AAAAQ/0/LD2o/WnzEnQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 5))\n",
    "sns.set_style(\"whitegrid\")\n",
    "sns.boxplot(x = 'testgroup', y = 'revenue', data = group_b) # тестовая группа"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**По результатам рассмотрения, в контрольной группе присутствуют выбросы.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Далее, стоит посмотреть на описательные характеристики по прибыли обеих групп:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    202103.000000\n",
       "mean         25.413720\n",
       "std         920.768137\n",
       "min           0.000000\n",
       "25%           0.000000\n",
       "50%           0.000000\n",
       "75%           0.000000\n",
       "max       37433.000000\n",
       "Name: revenue, dtype: float64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "group_a.revenue.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    202667.000000\n",
       "mean         26.751287\n",
       "std         287.324162\n",
       "min           0.000000\n",
       "25%           0.000000\n",
       "50%           0.000000\n",
       "75%           0.000000\n",
       "max        4000.000000\n",
       "Name: revenue, dtype: float64"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "group_b.revenue.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**По результатам рассмотрения, в контрольной и тестовой группах различается размер максимальной покупки.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Исходя из предыдущего вывода, стоит проверить количество платящих пользователей и посмотреть на распределение размерности платежей:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f31ec643ef0>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 5))\n",
    "sns.set_style(\"whitegrid\")\n",
    "sns.histplot(group_a.query('revenue != 0').groupby('revenue')) # контрольная группа"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f31eccc88d0>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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E81nn31mWltbTX5+vtm1a1eo2zltgfo/1kMPPWSefPJJY0zPmnufz2cOHTpkjDGmra3NTJs2zWzfvt3MnDnTVFVVGWOMmTt3rnnxxReNMcb88Y9/NHPnzjXGGFNVVWXuvvtuY0zg50S4C9T/+vXrjc/nMz6fz5SUlPj737p1qykqKjphHDc+9wP1fu+995rXXnvthMf3pPf7QL0f66677jLLly83xvSseT/W73//ezNr1ix/b+H6uo/IFbKkpCRlZGRIkuLj45WWliav16vq6moVFBRIkgoKCvTGG29Ikn+7x+PR6NGj1dTUpPr6em3evFlXXHGFBg4cqAEDBuiKK64I+9+YA/U+btw4RUcf+aPb0aNHH3dNuJOpr6/XoUOHNHr0aHk8HhUUFIT9ra4C9R5IdXW18vLyFBMTo9TUVA0bNkw7d+507W2+TtW/MUavvfaarrvuui7HcePcezwefeMb35AkdXR0qKOjQx6PR1u3blVubq4kaerUqf4+1q1bp6lTp0qScnNztWXLFhljAj4nwl2g/idMmCCPxyOPx6NLLrnklHdHceNzP1DvgfSk9/tT9X7o0CFt3bpV3//+97scx43zflRdXZ3Wr1+vadOmSTryPheur/uIDGTHqq2tVU1NjUaNGqWGhgYlJSVJkgYNGqSGhgZJJ97WKSUlRV6v1/W3ezq292O98sorGj9+/HGPKygo0I9//GO9++67kgIfE7f4eu8vvvii8vPzVVpa6j9VHWh+3T7v0snn/t1331ViYqLOO++84x7XU+a+s7NTU6ZM0eWXX67LL79cqamp6t+/v/8XkWP78Hq9+uY3vynpyCV5+vXrp/3797t67r/e/7Fz397erhUrVujKK6/0b9uxY4cmT56s2267Tbt27ZLk3lvcBer9iSeeUH5+vsrKyvynrXra+31X8/7GG28oMzNT8fHx/m09ad4lqaysTLNnz1avXkfizv79+8P2dR/Rgezw4cOaOXOm7rvvvuOekJL8vzX2VIF6f/rppxUVFaXJkydLOrKq8uabb6qyslJz5szRPffco0OHDtkqOyi+3vuPfvQjrV27VitWrFBSUpIefvhh2yU6KtDcV1VVHbc61tPmPioqSitWrNCGDRu0c+dOffrpp7ZLCqmv9//xxx/7v/fggw/q0ksv1aWXXipJysjI0Lp16/S3v/1N06dP15133mmr7KA4We+zZs3S66+/rldeeUUHDhxw3eeiuqurea+qqlJeXp7/654272+++aYSEhI0cuRI26V0S8QGsvb2ds2cOVP5+fnKycmRJCUmJqq+vl7SkdMyCQkJkk68rVNdXZ2Sk5PP6HZP4eBkvUvSq6++qvXr1+uxxx7zh9GYmBidc845kqSRI0fqW9/6lv773/8GPCbh7mS9n3vuuYqKilKvXr1UWFio999/X1Lg23m5dd6lwHPf0dGhtWvX6tprr/Vv62lzf1T//v01ZswY7dixQ01NTero6JB0fB/Jycn6/PPPJR05NgcPHtQ555zj6rk/6mj/R0+3PfXUU9q3b59KS0v9j4mPj/ef6powYYI6Ojq0b98+1/d/bO9JSUnyeDyKiYnR9ddfH/B17/b3+6O+Pu/79u3T+++/r6uuusr/mJ427++9957WrVunrKwszZo1S1u3btXChQvD9nUfkYHMGKP7779faWlpmjFjhn97VlaWKisrJR25ufnEiROP226M0Y4dO9SvXz8lJSVp3Lhx2rx5sw4cOKADBw5o8+bNGjdunJWeuitQ7xs3btSSJUv09NNPq2/fvv7t+/btU2dnp6Qjf5mye/dupaamKikpSfHx8dqxY4eMMccdr3AVqPejIVw6soR/9A4RWVlZWrlypdra2vy9X3LJJa69zVeg/iXprbfeUlpa2nHL8j1p7vft2+f/y+GWlha99dZbGjFihMaMGaPVq1dLOvIXdEfnMSsry/9XdKtXr9bYsWPl8XgCPifC3cn6T0tL08svv6zNmzdr0aJF/lM6kvTFF1/4/3J2586d8vl8Ouecc1z53A/U+9HXvTHmhNd9T3m/D9S7dOR5fdVVVyk2Ntb/+J4079KRvyLeuHGj1q1bp0WLFmns2LF6/PHHw/Z1Hza3Tgqlbdu2acWKFbrwwgv9f+I/a9YsFRUVqbi4WMuWLdPgwYNVXl4u6chvChs2bFB2drb69u2rsrIySdLAgQN1xx13+D8seOedd2rgwIF2muqmQL0vWLBAbW1t/n+oR40apfnz5+udd97R4sWLFR0drV69eunBBx/09/jAAw+otLRULS0tGj9+/HGfOwtHgXqvqqrSRx99JEkaMmSI5s+fL0m64IILdM011+jaa69VVFSU5s2bp6ioKEly5W2+AvU/YcIErVq16rhTF5J61NzX19drzpw56uzslDFGkyZN0tVXX63zzz9fJSUlKi8vV3p6ugoLCyVJ06ZN0+zZs5Wdna0BAwboiSeekNT1cyKcBer/O9/5jgYPHqwbb7xRkpSdna277rpLq1ev1p///GdFRUWpT58+WrRokTwejytvcReo95/85Cfav3+/jDH69re/rQcffFBSz3q/D9S7JK1atUo/+9nPjnt8T5r3rsyePTssX/fcOgkAAMCyiDxlCQAAEE4IZAAAAJYRyAAAACwjkAEAAFhGIAMAALCMQAYAAGAZgQwAAMAyAhkAAIBl/wfYAx2TGxczxwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 5))\n",
    "sns.set_style(\"whitegrid\")\n",
    "sns.histplot(group_b.query('revenue != 0').groupby('revenue')) # тестовая группа"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**По результатам видим, что в тестовой группе платежи распределяеются от 2000 до 4000, в контрольной присутствует в целом две группы пользователей - одна с большими платежами, а вторая близка к тестовой группе.**\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- На следующем шаге рассмотрим общее значение прибыли у обеих групп:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Контрольная группа: 5136189\n",
      "Тестовая группа: 5421603\n",
      "Разница контроль/тест: 285414\n",
      "В тестовой группе прибыль больше на 5.56%\n"
     ]
    }
   ],
   "source": [
    "print(f'Контрольная группа: {group_a.revenue.sum()}') # контрольная группа\n",
    "print(f'Тестовая группа: {group_b.revenue.sum()}') #тестовая группа\n",
    "print(f'Разница контроль/тест: {group_b.revenue.sum() - group_a.revenue.sum()}') # разница\n",
    "print(f'В тестовой группе прибыль больше на {(group_b.revenue.sum() / group_a.revenue.sum() * 100 - 100).round(2)}%') # разница"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Этап 2. Выбор метрик для исследования и их подсчёт"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Выбор метрик, в первую очередь обсуславливается тем, какие данные у нас имеются изначально - пользователи и выручка. Наиболее подходящими метриками для анализа в текущей ситуации считаю:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Cредний доход от пользователя (ARPU) - заодно проверим различие в 5%, которое дано в условии.\n",
    "- Средний доход от платящего пользователя (ARPPU).\n",
    "- Отношение двух показателей друг к другу (в данном случае: доля платящих пользователей ко всем пользователям) - конверсия (CR)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Считаем ARPU в обеих группах:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ARPU в контрольной группе: 25.414\n"
     ]
    }
   ],
   "source": [
    "ARPU_for_a = group_a.revenue.mean().round(3)\n",
    "print(f'ARPU в контрольной группе: {ARPU_for_a}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ARPU в тестовой группе: 26.751\n"
     ]
    }
   ],
   "source": [
    "ARPU_for_b = group_b.revenue.mean().round(3)\n",
    "print(f'ARPU в тестовой группе: {ARPU_for_b}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Различия ARPU в группах в процентном соотношении: в тестовой группе больше на 5.26%\n"
     ]
    }
   ],
   "source": [
    "print(f'Различия ARPU в группах в процентном соотношении: в тестовой группе больше на {((ARPU_for_b / ARPU_for_a * 100) - 100).round(2)}%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Считаем ARPPU в обеих группах:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ARPPU в контрольной группе: 2663.998\n"
     ]
    }
   ],
   "source": [
    "ARPPU_for_a = (group_a.query('revenue > 0').revenue.sum() / group_a.query('revenue > 0').user_id.nunique()).round(3)\n",
    "print(f'ARPPU в контрольной группе: {ARPPU_for_a}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ARPPU в тестовой группе: 3003.658\n"
     ]
    }
   ],
   "source": [
    "ARPPU_for_b = (group_b.query('revenue > 0').revenue.sum() / group_b.query('revenue > 0').user_id.nunique()).round(3)\n",
    "print(f'ARPPU в тестовой группе: {ARPPU_for_b}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Различия ARPPU в группах в процентном соотношении: в тестовой группе больше на 12.75000957207925%\n"
     ]
    }
   ],
   "source": [
    "print(f'Различия ARPPU в группах в процентном соотношении: в тестовой группе больше на {((ARPPU_for_b / ARPPU_for_a * 100) - 100)}%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Считаем CR в обеих группах:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CR в контрольной группе: 0.00954\n"
     ]
    }
   ],
   "source": [
    "CR_for_a = round(group_a.query('revenue > 0').user_id.nunique() / group_a.user_id.nunique(), 6)\n",
    "print(f'CR в контрольной группе: {CR_for_a}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CR в тестовой группе: 0.008906\n"
     ]
    }
   ],
   "source": [
    "CR_for_b = round(group_b.query('revenue > 0').user_id.nunique() / group_b.user_id.nunique(), 6)\n",
    "print(f'CR в тестовой группе: {CR_for_b}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Различия в группах: CR в контрольной группе больше на 0.000634%\n"
     ]
    }
   ],
   "source": [
    "print(f'Различия в группах: CR в контрольной группе больше на {round((CR_for_a - CR_for_b), 6)}%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Этап 3. Проверка статистической значимости отличий в метриках"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "В первую очередь проверяем нормальность распределения выручки:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**1) Проверка контрольной группы на нормальность распределения**\n",
    "- Н0: нормальное распределение.\n",
    "- Н1: распределение не относится к нормальному."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>W</th>\n",
       "      <th>pval</th>\n",
       "      <th>normal</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>revenue</th>\n",
       "      <td>585152.731273</td>\n",
       "      <td>0.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     W  pval  normal\n",
       "revenue  585152.731273   0.0   False"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pg.normality(group_a.revenue, method='normaltest')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f31ec2a2f28>"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 5))\n",
    "sns.histplot(data = group_a, x='revenue') # визуализируем"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Тест и визуальное представление говорят о том, что распределение не является нормальным. Отвергаем нулевую гипотезу. Принимаем альтернативную.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**2) Проверка тестовой группы на нормальность распределения**\n",
    "- Н0: нормальное распределение.\n",
    "- Н1: распределение не относится к нормальному."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>W</th>\n",
       "      <th>pval</th>\n",
       "      <th>normal</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>revenue</th>\n",
       "      <td>326622.395409</td>\n",
       "      <td>0.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     W  pval  normal\n",
       "revenue  326622.395409   0.0   False"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pg.normality(group_b.revenue, method='normaltest')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f31ec568e80>"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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sIDMzMw+y3SxLpT9wIEDvPbaawCMGTOGlStXAjB+/HhuvfVWpk+fTlpaGsuWLSMtLQ3gE/l78fLLL1NdXc1nP/tZysrKgDOvR6oc+57y79q1K/THv6WlhXvvvZfu7m6CIOCWW27hC1/4Ap/5zGdYvHgx69atIy8vj4qKCgBmz57N0qVLiUajDB8+nO9973tA769Jf9VT9n/8x3+kra2NIAj4u7/7Ox588EEgfD/3PVm6dGm/PPbefkySJClEvCwrSZIUIpY7SZKkELHcSZIkhYjlTpIkKUQsd5IkSSFiuZMkSQoRy50k9SIIAj744IO+XoYkXTTLnST9maNHj1JcXMy//Mu/MGPGDH7wgx9w2223UVpayvr16wF45JFH2Lp1a/w5jz32GD/+8Y8B2Lx583nbHz16lFtvvZVvfetblJSU8NWvfpWOjg4A7rzzzvhtm9599934p9x3d3fz8MMPx/f185//PGmvgaRPLsudJF3AW2+9xZe//GWqqqqIxWJs376d6upqXn31VV566SWmT5/O008/Hd/+6aefZvr06ezfv5+33nrrvO3P7vMf/uEfqKmpYejQofHbFvVk+/btDB06lCeeeIInnniCbdu20dTUlNDckj75vP2YJF3A6NGjyc/P5+GHH+b555+nvLwcOHPv5MbGRioqKmhtbSUWi9HW1sawYcO46qqr+OlPf3rB7a+66ir+3//7f+Tl5QEwYcIE3n777V7X8Pzzz/P666/HS+CJEyd46623yM3NTWBySZ90ljtJuoDBgwcDZ95zN3fuXL70pS+dt80tt9zC7t27+dOf/sT06dN73f7o0aNkZGTEv09LS6OzszP+9dk7QXZ1dcW3CYKAb33rW9x8882XN5ykUPOyrCT1YsqUKTzxxBO89957AMRiMVpbWwGYPn06Tz31FLt37+aWW275i9v3ZMyYMRw+fBiAX/3qV+fM/bOf/Yz3338fgDfffJNTp05d3oCSQsczd5LUiylTpvD73/8+fiZu8ODBfPe732XUqFGMHz+e9957j6ysLLKysnrdfsCAnv8t/dWvfpVFixaxbds2pk6dGh+vqKjg7bffZtasWQRBwIgRI/jBD36QwLSSwiASnL0WIEmSpE88L8tKkiSFiOVOkiQpRCx3kiRJIWK5kyRJChHLnSRJUohY7iRJkkLEcidJkhQiljtJkqQQ+f8AUqYHdPadkHwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 5))\n",
    "sns.histplot(data = group_b, x='revenue') # визуализируем"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Тест и визуальное представление говорят о том, что распределение не является нормальным. Отвергаем нулевую гипотезу. Принимаем альтернативную.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**3) Проверяем гомогенность дисперсий**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Н0: дисперсии равны.\n",
    "- Н1: дисперсии различны."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LeveneResult(statistic=0.3896289474701388, pvalue=0.5324948591043842)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ss.levene(group_a.revenue,group_b.revenue)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "По результатам теста можем считать дисперсии приблизительно одинаковыми (pvalue = 0.5324948591043842). Подтверждаем нулевую гипотезу."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Приступаем к проверке статистической значимости отличий ARPU:**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Выдвигаем две гипотезы:**\n",
    "- H0: в контрольной и тестовой группе нет статистически значимых различий \n",
    "- H1: в контрольной и тестовой группе есть статистически значимые различия\n",
    "\n",
    "Для статистического анализа можем использовать классический T-test Стьюдента. Распределение не является нормальным (что принимается при использовании), но дисперсии равны, что соответствует требованиям для исследования. Также можно воспользоваться Bootstrap для проверки (самовытаскивание - в эксклюзивных случаях), но в целях экономии времени, сделаем более быстрый тест.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Значение pvalue: 0.532494858971837. Нулевая гипотеза верна (pvalue > 0.05). Говорим о том, что статистически значимых различий нет.\n"
     ]
    }
   ],
   "source": [
    "print(f'Значение pvalue: {ss.ttest_ind(group_a.revenue,group_b.revenue)[1]}. Нулевая гипотеза верна (pvalue > 0.05). Говорим о том, что статистически значимых различий нет.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Приступаем к проверке статистической значимости отличий ARPPU:**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Для начала подготовим данные и проверим распределение на нормальность и гомогенность дисперсий:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "a_arppu = group_a.query('revenue != 0') # выбираем только тех пользователей, которые совершили оплату\n",
    "b_arppu = group_b.query('revenue != 0')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**1) Проверка контрольной группы на нормальность распределения**\n",
    "- Н0: нормальное распределение.\n",
    "- Н1: распределение не относится к нормальному."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>W</th>\n",
       "      <th>pval</th>\n",
       "      <th>normal</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>revenue</th>\n",
       "      <td>1394.945784</td>\n",
       "      <td>1.234161e-303</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   W           pval  normal\n",
       "revenue  1394.945784  1.234161e-303   False"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pg.normality(a_arppu.revenue, method='normaltest')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f31d9fd2828>"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 5))\n",
    "sns.histplot(data = a_arppu, x='revenue') # визуализируем"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Тест и визуальное представление говорят о том, что распределение не является нормальным. Отвергаем нулевую гипотезу. Принимаем альтернативную.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**2) Проверка тестовой группы на нормальность распределения**\n",
    "- Н0: нормальное распределение.\n",
    "- Н1: распределение не относится к нормальному."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>W</th>\n",
       "      <th>pval</th>\n",
       "      <th>normal</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>revenue</th>\n",
       "      <td>1068.860008</td>\n",
       "      <td>7.943249e-233</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   W           pval  normal\n",
       "revenue  1068.860008  7.943249e-233   False"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pg.normality(b_arppu.revenue, method='normaltest')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f31ec2e53c8>"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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vmhbYQAAAJGiS4HsgQce0K233qqCggL16+fonTIAAAD6vC4FsujoaN1222121wIAABCRunS66+abb9ZLL72k2tpaNTQ0BP8DAABAz3XpDNm5+4398pe/DC7zeDyqrKy0pyoAAIAI0qVAtmPHDrvrAAAAiFhdCmTnnj95ofz8/F4tBgAAIBJ1KZB9+OGHwa+bmpq0b98+paSkEMgAAAB6QZcC2cKFC9t939jYqPnz59tSEAAAQKTp1k3F+vfvr+rq6t6uBQAAICJ16QzZv//7vwe/DgQC+tOf/qSpU6faVhQAAEAk6VIgu+uuu4JfR0VFacSIEUpKSrKtKAAAgEjSpUuW119/vUaNGqXTp0+rsbFRX/va1+yuCwAAIGJ0KZBt2rRJBQUF2rJlizZv3hz8GgAAAD3XpUuWv/jFL7Ru3ToNHTpUknT8+HHdeeedysnJsbU4AACASNClM2SWZQXDmCRdeeWVsizLtqIAAAAiSZfOkKWnp+vuu+9Wbm6upLOXMCdNmmRrYQAAAJGi00D2+eef66uvvtJDDz2kbdu26f3335ckpaamasaMGY4UCAAA0Nd1GsiWLl2q4uJiSVJWVpaysrIkSZ988omWLl2qX/ziF93a6a9//WutXbtWHo9HV199tZ588knV1taquLhYDQ0NSklJ0dNPP62YmJhubR8AACCcdPoesq+++krXXHPNRcuvueYaHTt2rFs79Pl8evHFF7V+/XqVl5erra1NFRUVWr58ue688069/vrrGjRokNatW9et7QMAAISbTgPZyZMnQ/7szJkz3d5pW1ubzpw5o9bWVp05c0bDhg3T/v37lZ2dLUmaNWuWKisru719AACAcNJpIBs7dqxeffXVi5avXbtWKSkp3dphYmKi7rrrLt18881KT0/XgAEDlJKSokGDBik6+uwV1KSkJPl8vm5tHwAAINx0+h6yRx55RPfdd59+97vfBQPYRx99pJaWFj377LPd2uGJEydUWVmpyspKDRw4UA888ID27NnTrW01NTWpqqqqW//2cni9Xvn9ftv301121hYIBHq0/XAet5723hNuGLdQ/buhtlB6qzY75j6cxs3ksX8hp+u4nN7dMkYd6U5tTs27m8fNiUwRSqeB7Otf/7peeeUV7d+/X4cPH5YkTZ48WWlpad3e4VtvvaVvfOMbio+Pl3T2wwIffPCBGhsb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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 5))\n",
    "sns.histplot(data = b_arppu, x='revenue') # визуализируем"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Тест и визуальное представление говорят о том, что распределение не является нормальным. Отвергаем нулевую гипотезу. Принимаем альтернативную.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**3) Проверяем гомогенность дисперсий**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Н0: дисперсии равны.\n",
    "- Н1: дисперсии различны."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LeveneResult(statistic=80.85567421779912, pvalue=3.779689868667878e-19)"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ss.levene(a_arppu.revenue,b_arppu.revenue)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "По результатам теста дисперсии различаются (pvalue = 3.779689868667878e-19). Отвергаем нулевую гипотезу, принимаем альтернативную."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Выдвигаем две гипотезы:**\n",
    "- H0: в контрольной и тестовой группе нет статистически значимых различий \n",
    "- H1: в контрольной и тестовой группе есть статистически значимые различия\n",
    "\n",
    "Для статистического анализа можем использовать модификацию T-test Стьюдента - T-test Уэлча. Распределение не является нормальным (что принимается при использовании), а также имеются необязательно равные известные дисперсии, что соответствует требованиям для исследования. Также можно воспользоваться Bootstrap для проверки (самовытаскивание - в эксклюзивных случаях), но в целях экономии времени, сделаем более быстрый тест."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Значение pvalue: 0.10020780398916015. Нулевая гипотеза верна (pvalue > 0.05). Говорим о том, что статистически значимых различий между группами нет.\n"
     ]
    }
   ],
   "source": [
    "print(f'Значение pvalue: {ss.ttest_ind(a_arppu.revenue, b_arppu.revenue, equal_var=False)[1]}. Нулевая гипотеза верна (pvalue > 0.05). Говорим о том, что статистически значимых различий между группами нет.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Приступаем к проверке статистической значимости отличий CR:**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Выдвигаем две гипотезы:**\n",
    "- H0: в контрольной и тестовой группе нет статистически значимых различий \n",
    "- H1: в контрольной и тестовой группе есть статистически значимые различия\n",
    "\n",
    "Для статистического анализа будем использовать критерий хи-квадрат. Нам необходимо добавить в исходную таблицу признак того, была ли конверсия в покупку (платеж > 0): "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>revenue</th>\n",
       "      <th>testgroup</th>\n",
       "      <th>convertion_to_purchase</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>a</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>a</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>b</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id  revenue testgroup  convertion_to_purchase\n",
       "0        1        0         b                       0\n",
       "1        2        0         a                       0\n",
       "2        3        0         a                       0\n",
       "3        4        0         b                       0\n",
       "4        5        0         b                       0"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ab_test_data['convertion_to_purchase'] = ab_test_data['revenue'].apply(lambda x: 1 if x > 0 else 0) # проверяем значения выручки от пользователя, в новой колонке добавляем значение по ситуации\n",
    "ab_test_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>convertion_to_purchase</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>testgroup</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>200175</td>\n",
       "      <td>1928</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>200862</td>\n",
       "      <td>1805</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "convertion_to_purchase       0     1\n",
       "testgroup                           \n",
       "a                       200175  1928\n",
       "b                       200862  1805"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.crosstab(ab_test_data.testgroup, ab_test_data.convertion_to_purchase) # проверяем таблицу сопряженности"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Делаем тест:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Значение pvalue: 0.03647561892312613. Отклоняем нулевую гипотезу, принимаем альтернативную (pvalue < 0.05). Говорим о том, что  есть статистически значимые различия CR.\n"
     ]
    }
   ],
   "source": [
    "print(f'Значение pvalue: {ss.chi2_contingency(pd.crosstab(ab_test_data.testgroup, ab_test_data.convertion_to_purchase))[1]}. Отклоняем нулевую гипотезу, принимаем альтернативную (pvalue < 0.05). Говорим о том, что  есть статистически значимые различия CR.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Вывод:\n",
    "Мы провели исследование метрик **ARPU, ARPPU и CR** в контрольной и тестовой группе. Тесты показали, что статистически значимых различий в ARPU и ARPPU не наблюдается. \n",
    "При этом, статистические различия CR в контрольной и тестовой группе являются значимыми. В тестовой группе конверсия статистически значимо ниже, чем в контрольной группе.\n",
    "\n",
    "Далее, исходя из исследования самих данных видим, что пользователи, которые платят существенно много, находятся только в контрольной группе. В тестовой же группе платежи более устойчивые, без каких-либо скачков. Здесь можно задуматься о том, что, возможно, изначально проведенный A/B-тест наборов акционных предложений был проведен некорректно. \n",
    "Однако, по условию задачи тест всё же был проведен, поэтому **также** можно считать, что большие платежи в контрольной группе не являются аномалиями.\n",
    "\n",
    "То есть, узнать, какую цель преследовала компания, планируя данный эксперимент и в чем суть акционных предложений, можно узнать только у самой компании. В условии задачи нет предыстории :)\n",
    "\n",
    "На основе имеющихся данных, могу предположить два варианта развития событий:\n",
    "- Если тестирование было проведено корректно - набор акционных предложений в контрольной группе смотрится привлекательнее на данный момент. Оставляем.\n",
    "- Если тестирование было проведено некорректно и в контрольной группе имеются аномалии - принимаем акционные предложения тестовой группы."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 3\n",
    "В игре Plants & Gardens каждый месяц проводятся тематические события, ограниченные по времени. В них игроки могут получить уникальные предметы для сада и персонажей, дополнительные монеты или бонусы. Для получения награды требуется пройти ряд уровней за определенное время. С помощью каких метрик можно оценить результаты последнего прошедшего события?\n",
    "\n",
    "Предположим, в другом событии мы усложнили механику событий так, что при каждой неудачной попытке выполнения уровня игрок будет откатываться на несколько уровней назад. Изменится ли набор метрик оценки результата? Если да, то как?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Метрики для оценки результатов последнего прошедшего события:**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Для наиболее успешного взаимодействия со своими пользователями необходимо опираться на самые важные метрики:\n",
    "    - Retention rate - процент игроков, которые возвращаются в игру в период события. Отслеживаем, как событие\n",
    "    влияет на посещаемость и насколько успешно мы удерживаем игроков.\n",
    "    - DAU - количество уникальных пользователей в день. Сравниваем период прохождения события с обычным периодом.\n",
    "    - МАU - количество уникальных пользователей в месяц. Сравниваем период прохождения события с обычным периодом.\n",
    "    - Average Session Duration (ASD) - это среднее время сессий за период времени. Можно сравнивать с ASD в обычный период.\n",
    "    - Stickiness rate (SR) - регулярность использования приложения в течение месяца. Можно сравнивать с SR в обычный период.\n",
    "    - ARPU/ARPPU - в случае, если наша игра имеет донат разного рода, показатели данных метрик с введением нового события\n",
    "    могут возрастать, либо наоборот уменьшаться, если предложения не заходят пользователям/являются слишком дорогими.\n",
    "    - ещё было бы здорово отслеживать метрику того, насколько успешно игроки проходят события и собирают награды - доля\n",
    "    пользователей от всех участников события, которые прошли событие и собрали все награды, можно адаптировать CR под данный\n",
    "    случай.\n",
    "    - Customer satisfaction score (CSAT) - хороший разработчик всегда будет успешно взаимодействовать со своими игроками\n",
    "    если будет активно отслеживать отзывы и анализировать ответы на внутриигровые опросники. Пользователи всегда не\n",
    "    против поделиться впечатлениями от события, поэтому индекс удовлетворенности игроков очень важен :)\n",
    "    - Cost per acquisition (CPA) – стоимость действия. Важная метрика для отслеживания, так как новые события\n",
    "    рекламируются гораздо активнее. Считается как затраты на количество приобретённых игроков."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Метрики для оценки результатов при усложнении механики:**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Предложенное усложнение механики события может быть заведомо неудачным, по одной простой причине: это может отбить желание играть, если при каждой неудачной попытке выполнения уровня игрок будет откатываться на несколько уровней назад.\n",
    "Напрямую это, возможно, будет влиять на такие метрики как: DAU/MAU (в сторону снижения), ASD, Retention, ARPU/ARPPU.\n",
    "\n",
    "Стандартный набор метрик для оценки результата не изменится, но необходимо более тщательно и даже ежедневно отслеживать текущие показатели. Также, в качестве дополнительного анализа стоит посмотреть на следующие метрики:\n",
    "    - Churn rate - метрика, которая показывает, какая доля пользователей перестает заходить в игру в течение\n",
    "    определенного периода времени. Можно получить представление аудитории об изменениях в игре и вовлечении игроков\n",
    "    в период прохождения события.\n",
    "    - Success rate per levels - самодельная метрика с поуровневой статистикой, в которой указано, какой процент\n",
    "    завершенности имеет каждый из уровней игры. Выявление самого сложного для игроков уровня. Рассчитывается как доля\n",
    "    игроков прошедших уровень от всех игроков, которые были на данном уровне.\n",
    "    - Average count of attempts - самодельная метрика с поуровневой статистикой, в которой указывается среднее\n",
    "    количество попыток для прохождения уровня. Можно связать с Success rate per levels и понять, при каком количестве\n",
    "    попыток пользователям надоедает прохождение.\n",
    "    - На CSAT стоит обращать повышенное внимание, так как усложнение не останется незамеченным. Стоит сразу запустить\n",
    "    опросники."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
